對(重載overloading和覆寫overriding哪個更早執行-- visitor幫助篇)這篇文章的說明
有興趣的話可以看看這篇文章,下邊gg_shily朋友和我的一些討論,在gg_shily的激發下,我決定仔細研究一下這個問題,在我的很多文章中都用過的字節碼,我想在這里也能幫助我 。下邊是分析的結果,為了方便觀看,我把里邊的兩個類稍微變動一下?1
package?ov;
?2
?3
public?class?Child?extends?Parent?
{
?4
?5
????public?void?run(Object?o)?
{
?6
????????System.out.println("?in?Child?+param:Object?");
?7
????}
?8
?9
????public?void?run(String?str)?
{
10
????????System.out.println("?in?Child?+?param:String?");
11
????}
12
13
????public?static?void?main(String[]?args)?
{
14
????????
15
????????String?str?=?new?String();
16
????????Parent?p?=?new?Child();
17
????????test(p,str);
18
????}
19
????public?static?void?test(Parent?p,String?str)
{
20
????????p.run(str);
21
????}
22
}
然后編譯,反編譯得到字節碼如下:(得到字節碼的方法見這里)
?2

?3



?4

?5



?6

?7

?8

?9



10

11

12

13



14

15

16

17

18

19



20

21

22

















































然后到運行期,會向下轉型到Child.run(String)
posted on 2006-12-20 00:32 dreamstone 閱讀(2608) 評論(3) 編輯 收藏 所屬分類: jdk相關